package com.yyw.foodie.config;

import com.yyw.foodie.Interceptor.AuthInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * @author 易煜玮
 * @ClassName WebConfig.java
 * @Description Web相关的配置
 * @createTime 2021年05月31日 21:57:00
 */
@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Value("${file.user-path}")
    private String fileBasePath;

    @Autowired
    private AuthInterceptor authInterceptor;

    /**
     * 配置资源映射
     * 为什么要配置 swagger2的资源映射？因为默认swagger2是自动映射了，一旦我们主动声明，则失效了，必须我们手动申明下，否则无法打开UI界面
     * 注意: 映射资源路径的 file: xxx ,其中 file: 是固定写法，后面对应了要映射的路径（基础路径）,
     *      这样声明后，该文件夹（基础路径）的子文件夹都会被扫描到
     *      想要访问该文件夹下的资源，只需要 服务路径 + 文件名, 不需要在加上基础路径了
     *      例如: http://localhost:8088/xxx.jpg  这样就会基于 基础路径开始去找 xxx.jpg 这个文件
     * @param registry
     */
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/**")
                .addResourceLocations("classpath:/META-INF/resources/")  // 映射swagger2
                .addResourceLocations("file:" + fileBasePath);          // 映射资源路径文件
    }

    /**
     * RestTemplate Bean 注入
     * @param builder
     * @return
     */
    @Bean
    public RestTemplate restTemplate(RestTemplateBuilder builder) {
        return builder.build();
    }


    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(authInterceptor)
                .addPathPatterns("/shopcart/add")
                .addPathPatterns("/shopcart/del")
                .addPathPatterns("/address/list")
                .addPathPatterns("/address/add")
                .addPathPatterns("/address/update")
                .addPathPatterns("/address/setDefalut")
                .addPathPatterns("/address/delete")
                .addPathPatterns("/orders/*")
                .addPathPatterns("/center/*")
                .addPathPatterns("/userInfo/*")
                .addPathPatterns("/myorders/*")
                .addPathPatterns("/mycomments/*")
                .excludePathPatterns("/myorders/deliver")
                .excludePathPatterns("/orders/notifyMerchantOrderPaid");
    }
}
